package com.sxj.corejava.code09_集合.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2025年02月20日
 * 控制台输入一个字符串,统计字符串中每个字符出现的次数,保存到HashMap集合中
 * 至少使用两种不同的方式实现
 */
public class Test03_练习 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String s = sc.next();
//        Map<Character, Integer> map = test01(s);
        Map<Character, Integer> map = test02(s);
        System.out.println(map);
    }

    public static Map<Character, Integer> test01(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            // 取出当前迭代的字符
            char c = s.charAt(i);
            // 判断当前集合中是否存在指定字符的key
            if (map.containsKey(c)) {
                // 如果存在,则取出当前字符在集合中对应的value值,value表示字符出现的次数
                Integer count = map.get(c);
                // 该字符串所对应的次数+1
                map.put(c, count + 1);
            } else {
                // 如果不存在,则表示第一次出现,value值为1
                map.put(c, 1);
            }
            // 简写方式
            // map.put(c,map.containsKey(c) ? map.get(c) + 1 : 1);
        }
        return map;
    }

    public static Map<Character, Integer> test02(String s) {
        Map<Character, Integer> map = new HashMap<>();
        while (!s.isEmpty()) {
            // 取出字符串中第一个字符
            char c = s.charAt(0);
            // 将整个字符串中所有与该字符相同的字符全部替换成空字符串
            String s2 = s.replaceAll(c + "", "");
            // 用原来的字符串长度-替换后的字符串长度,其值即为该字符出现的次数
            map.put(c, s.length() - s2.length());
            // 再将替换后的字符串重复上述的操作
            s = s2;
        }
        return map;
    }
}
